#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

struct window{
	int id;
	vector<int> v;
};
struct customer{
	int finish_time;
	int processing_time;
};
bool cmp(const window &a,const window &b){
	if( a.v.size() != b.v.size() ) return a.v.size() < b.v.size();
	else return a.id < b.id;
}
int main(){
	freopen("in.txt","r",stdin);
	int n,m,k,q;
	cin >> n >> m >> k >> q;
	window win[n];
	for(int i=0; i<n; i++) win[i].id = i;
	customer cust[k];
	bool flag[k];
	for(int i=0; i<k; i++) flag[i] = false;
	for(int i=0; i<k; i++) cin >> cust[i].processing_time;
	int p = 0;
	for(int i=0; i<m && p<k; i++){
		for(int j=0; j<n && p<k; j++)
			win[j].v.push_back(p++);
	}
	for(int t=1; t<=540; t++){
		int cnt = 0;
		for(int j=0; j<n; j++){
			if( !win[j].v.empty() ){
				flag[win[j].v[0]] = true;
				if( --cust[win[j].v[0]].processing_time==0 ){
					cust[win[j].v[0]].finish_time = t;
					win[j].v.erase(win[j].v.begin());
					cnt++;
				}
			}  
		}
		if( cnt ){
			for(int i=0; i<cnt && p<k; i++){
				sort(win,win+n,cmp);
				win[0].v.push_back(p++);
			}
		}
	}
	for(int i=0; i<n; i++){
		if( !win[i].v.empty() && flag[win[i].v[0]]==true ){
			cust[win[i].v[0]].finish_time = cust[win[i].v[0]].processing_time + 540;
			cust[win[i].v[0]].processing_time = 0;
		}
	}
	for(int i=0; i<q; i++){
		int id;
		cin >> id;
		if( cust[id-1].processing_time==0 ) 
			printf("%02d:%02d\n",cust[id-1].finish_time/60+8,cust[id-1].finish_time%60);
		else printf("Sorry\n");
	}
	return 0;
}
